<template>
    <div class="content" v-loading="loading">
        <!--头部-->
        <div class="header-setting">
            <a-breadcrumb class="breadcrumb">
                <a-breadcrumb-item>
                    <a href="../main">首页</a>
                </a-breadcrumb-item>
                <a-breadcrumb-item>系统设置</a-breadcrumb-item>
                <a-breadcrumb-item>优惠券</a-breadcrumb-item>
            </a-breadcrumb>
            <!--查询条件-->
            <div class="box-condition-body">
                <div class="box-condition-item" style="padding-top: 20px;">
                    <div style="margin: 0 50px">时间</div>
                    <template>
                        <div class="button_time">
                            <a-button type="primary" @click="button_time(0)" :style="computedStyle(0)">今天</a-button>
                            <a-button type="primary" @click="button_time(1)" :style="computedStyle(1)">昨天</a-button>
                            <a-button type="primary" @click="button_time(2)" :style="computedStyle(2)">本周</a-button>
                            <a-button type="primary" @click="button_time(3)" :style="computedStyle(3)">上周</a-button>
                            <a-button type="primary" @click="button_time(4)" :style="computedStyle(4)">本月</a-button>
                        </div>
                    </template>
                    <template>
                        <div style="margin: auto 50px">
                            <a-range-picker
                                    id="range-picker"
                                    :showTime="{
                                        format: 'HH:mm:ss' 
                                    }"
                                    format="YYYY-MM-DD HH:mm"
                                    :placeholder="['开始时间', '结束时间']"
                                    @ok="onOk"
                                    @change="onChange"
                                    :value="rangePickerValue()"/>
                        </div>
                    </template>
                </div>
                <div class="box-condition-item" style="justify-content: flex-start">
                    <div style="display: flex; justify-content: space-between;align-items: center">
                        <div style="margin: 0 135px  0 50px">优惠券名称</div>
                        <template>
                            <a-input-search
                                    placeholder="优惠券名称" style="width: 200px"
                                    @change="() => this.queryData()" v-model="searchName"/>
                        </template>
                    </div>
                     <div style="display: flex ;align-items: center">
                        <div style="margin: 0 135px  0 50px">优惠券类型</div>
                        <template>
                            <a-select
                                    showSearch
                                    placeholder="优惠券类型"
                                    optionFilterProp="children"
                                    style="width: 200px"
                                    :allowClear="allowClear"
                                    @select="selectPark"
                                    @change="selectParkChange">
                                <a-select-option v-for="p in typeOption" :key="p.value" :value="p.value">{{p.label}}
                                </a-select-option>
                            </a-select>
                        </template>
                    </div>
                </div>
            </div>
        </div>

        <!--表单-->
        <div class="box-form">
            <!--工具栏-->
            <div class="box-tool">
                <div></div>
                <div style="display: flex">
                    <a-button type="primary" @click="addTap()">添加优惠券</a-button>
                </div>
            </div>

            <!--数据表格-->
            <div class="box-table">
                <a-table :columns="columns"
                         :dataSource="dataSource"
                         :pagination="pagination"
                         bordered size="small"
                         :scroll="scroll"
                         :customRow="customRow"
                         :rowClassName="setRowClassName"
                         @change="tableChange">
                    <template slot="type" slot-scope="text">
                        <template v-if="text == 1">
                            固定金额
                        </template>
                        <template v-else>
                            其他
                        </template>
                    </template>
                    <template slot="status" slot-scope="text">
                        <template v-if="text == 1">
                           <font style="color:#00FF00"> 启用</font>
                        </template>
                        <template v-else>
                            <font style="color:#ff0000"> 禁用</font>
                        </template>
                    </template>
                     <template slot="parkName" slot-scope="text">
                        <template v-for="i in text">
                            {{i}}
                        </template>
                    </template>
                    
                     <template slot="cId" slot-scope="text">
                         <template v-if='text != null'>
                         <a-popconfirm title="确认删除？" okText="确认" cancelText="取消"
                                    @confirm="deleteOk(text)" placement="topLeft">
                            <a-button type="primary" style="margin-right: 0.05rem;">删除优惠券</a-button>
                        </a-popconfirm>
                         </template>
                    </template>
                </a-table>
            </div>
        </div>
        <!-- 弹窗 -->
        <a-modal
                :title="title" v-model="dispatchPopupData.visible"
                :confirmLoading="dispatchPopupData.loading"
                @cancel="() => { this.hideDispatchPopup() }" @ok="addOrUpdateCoupon">
             <a-row>
                <a-col :span="6">优惠券有效时间</a-col>
                <!-- @ok="onOkPop" -->
                <a-col :span="16">
                       <a-range-picker
                            id="range-picker"
                            :showTime="{
                                format: 'HH:mm:ss' 
                            }"
                            format="YYYY-MM-DD HH:mm:ss"
                            :placeholder="['开始时间', '结束时间']"
                            @ok="onOkPop"
                            @change="onChangePop"
                            :value="rangePickerValuePop()"/>
                </a-col>
            </a-row>
            <a-row style="margin-top:0.5em">
                <a-col :span="6">优惠券名称</a-col>
                <a-col :span="16">
                    <a-input style="width:70%;" placeholder="优惠券名称" v-model="name"/>
                </a-col>
            </a-row>
            <a-row style="margin-top:0.5em">
                <a-col :span="6">优惠券类型</a-col>
                <a-col :span="16">
                    <a-select style="width:70%" v-model="type" :options="typeOption"
                        placeholder="优惠券类型"/>
                </a-col>
            </a-row>
            <a-row style="margin-top:0.5em">
                <a-col :span="6">优惠券金额</a-col>
                <a-col :span="16">
                    <a-input style="width:70%;" placeholder="优惠券金额(元)" v-model="money"/>
                </a-col>
            </a-row>
            <a-row style="margin-top:0.5em" v-if="type != 1">
                <a-col :span="6">优惠券数量</a-col>
                <a-col :span="16">
                    <a-input style="width:70%;" placeholder="优惠券数量" v-model="amount"/>
                </a-col>
            </a-row>
            <a-row style="margin-top:0.5em">
                <a-col :span="6">优惠券状态</a-col>
                <a-col :span="16">
                    <a-select style="width:30%;" v-model="status" :options="statusOption"
                        placeholder="优惠券状态" />
                </a-col>
            </a-row>
            <a-row style="margin-top:0.5em">
                <a-col :span="6">停车点</a-col>
                <a-col :span="16">
                     <!-- <a-tree checkable defaultExpandParent v-model="selectParkIds" :treeData="parkPointList" :checkStrictly="true" /> -->
                     <a-tree
                        v-model="selectParkIds"
                        checkable
                        :expanded-keys="expandedKeys"
                        :auto-expand-parent="autoExpandParent"
                        :selected-keys="selectedKeys"
                        :tree-data="parkPointList"
                        @expand="onExpand"
                        @select="onSelect"
                        @check ="onCheck"
                    />
                </a-col>
            </a-row>
        </a-modal>
    </div>
</template>

<script>
    import moment from 'moment';
    // import CommonApi from '../../api/CommonApi';
    import apiCoupon from '../../api/system/Coupon';
    import ChargeSettingApi from '../../api/system/ChargeSettingApi';
    // 标题行
    const columns = [
        {
            title: "序号",
            dataIndex: "no",
            width: "5%",
        },
        {
            title: "优惠券名",
            dataIndex: "name",
            width: "10%",
        },
        {
            title: "类型",
            dataIndex: "type",
            scopedSlots: {customRender: 'type'},
            width: "8%",
        },
        {
            title: "金额(元)",
            dataIndex: "money",
            width: "8%"
        },

        {
            title: "数量",
            dataIndex: "amount",
            width: "10%",
        },
        {
            title: "有效起始时间",
            dataIndex: "startTime",
            width: "10%",
        },
        {
            title: "结束时间",
            dataIndex: "endTime",
            width: "10%",
        },
        {
            title: "停车点",
            dataIndex: "parkName",
            scopedSlots: {customRender: 'parkName'},
            width: "10%",
        },
        {
            title: "创建时间",
            dataIndex: "createTime",
            width: "10%",
        },
        {
            title: "状态",
            dataIndex: "isStatus",
            scopedSlots: {customRender: 'status'},
            width: "10%",
        },
        {
            title: "删除",
            dataIndex: "id",
            scopedSlots: {customRender: 'cId'},
            width: "10%",
        },
        // {
        //     title: "备注",
        //     dataIndex: "remark",
        //     width: "10%",
        // },
    ];

    const dataSource = [];

    const queryCondition = {
        limit: "100",
        curr: "1",
        name: "",
        type: "",
        timeScreenCondition: "6",
        startTimeStamp: "",
        endTimeStamp: ""
    };

    export default {
        name: "coupon",
        data() {
            return {
                /**表格**/
                columns: columns,
                dataSource: dataSource,
                /*分页插件*/
                pagination: {
                    showTotal: total => `共${total}条`,
                    total: 0,
                    current: 1,
                    defaultCurrent: 1,
                    showQuickJumper: true,
                    defaultPageSize: 100
                },
                /*表格固定头部*/
                scroll: {
                    y: 550,
                },
                tableState: {
                    rowId: -1,
                },
                /*当前选中的行数据*/
                currRowData: "",
                /**下拉框**/
                /*停车点下拉框*/
                allowClear: true,
                /**按钮**/
                /*收费时间按钮*/
                selectId: -1,
                selectIdPop: -1,
                /**日期控件**/
                /*收费时间日期*/
                momentArr: [],
                momentArrPop: [],
                /**文本框**/
                typeOption:[{"value":1,"label":"固定金额"}],
                statusOption:[{"value":0,"label":"禁用"},{"value":1,"label":"启用"}],
                title:'添加优惠券',
                searchName:'',
                searchType:'',
                queryCondition,
                id:'',
                name:'',
                type:1,
                money:'',
                amount:'',
                status:0,
                startTime:'',
                endTime:'',
                // parks:[],
                parkPointList: [],
                selectParkIds:[],
                //停车点tree
                autoExpandParent:true,
                expandedKeys:[],
                selectedKeys:[],
                /* 弹窗 */
                dispatchPopupData: {
                    visible: false,
                    loading: false
                },
                loading: false,
            };
        },

        methods: {
            /**组件部分相关方法**/
            tableChange(page) {
                this.queryCondition.curr = page.current;
                this.queryData();
                this.queryCondition.curr = 0;
            },
            customRow(record) {
                return {
                    on: { // 事件
                        // click: () => {
                        //     this.deleteName=record.name;
                        //     this.deleteId=record.id;
                        // },       
                        // 双击点击行
                        dblclick: () => {
                            this.updateCoupon(record);
                        }
                    },
                }
            },
            setRowClassName(record) {
                return record.id === this.tableState.rowId ? 'clickRowStyl' : '';
            },

            /**按钮以及日期控件**/
            button_time(e) {
                this.selectId = e;
                let momentStart;
                let momentEnd;
                switch (e) {
                    case 0:
                        momentStart = moment().startOf('day');
                        momentEnd = moment().endOf('day');
                        break;
                    case 1:
                        momentStart = moment().add('day', -1).startOf('day');
                        momentEnd = moment().add('day', -1).endOf('day');
                        break;
                    case 2:
                        momentStart = moment().week(moment().week()).startOf('week');
                        momentEnd = moment().week(moment().week()).endOf('week');
                        break;

                    case 3:
                        momentStart = moment().week(moment().week() - 1).startOf('week');
                        momentEnd = moment().week(moment().week() - 1).endOf('week');
                        break;
                    case 4:
                        momentStart = moment().month(moment().month()).startOf('month');
                        momentEnd = moment().month(moment().month()).endOf('month');
                        break;
                    default :
                        break;
                }
                this.momentArr[0] = momentStart;
                this.momentArr[1] = momentEnd;
                this.queryData();
            },

            clearSelect() {
                this.currRowData = "";
                this.tableState.rowId = "";
            },

            /* ---------------------- 条件筛选 ---------------------- */
            onChange(dates) {
                this.momentArr = dates;
            },
            onOk(value) {
                this.momentArr = value;
               
                this.queryData();
            },
            onChangePop(dates) {
                this.momentArrPop = dates;
            },
            onOkPop(value) {
                this.momentArrPop = value;
                if (this.momentArrPop != undefined && this.momentArrPop.length != 0) {
                    this.startTime = this.setTime(this.momentArrPop[0]);
                    this.endTime = this.setTime(this.momentArrPop[1]);
                } 
            },

            rangePickerValue() {
                return this.momentArr;
            },
            rangePickerValuePop() {
                return this.momentArrPop;
            },
            setTime(fmt) {
                const time = new Date(fmt);
                const Y = time.getFullYear()
                const M = (time.getMonth() + 1).toString().padStart(2, '0')
                const D = time.getDate().toString().padStart(2, '0')
                const h = time.getHours().toString().padStart(2, '0')
                const m = time.getMinutes().toString().padStart(2, '0')
                const s = time.getSeconds().toString().padStart(2, '0')
                return `${Y}-${M}-${D} ${h}:${m}:${s}`
            },
            parkingPoint() {
                ChargeSettingApi.point()
                    .then((data) => this.parkPointList = data.data)
                    .catch(error => this.$message.error("获取停车点失败:"+error))
            },

            selectPark(value) {
                this.searchType = value;
                this.queryData()
            },
            selectParkChange(value) {
                if (value == undefined || value == '') {
                    this.searchType = "";
                    this.queryCondition.curr = 1;
                    this.queryData();
                }
            },

            /** 操作相关(crud) **/
            queryData() {
                this.loading = true;
                let condition = this.getQueryCondition();
                apiCoupon.selectAllCoupon(condition)
                .then((data) => {
                    let {list, total, pageNum, pageSize} = data.data
                    let array = list || [];
                    array = array.map((item, index) => {
                        return {...item, no: total - (pageNum - 1) * pageSize - index}
                    })
                    this.dataSource = array;
                    this.pagination.total = total;
                    this.pagination.current = pageNum;
                    this.loading = false;
                }).catch(err => {
                    console.log("获取优惠券列表异常！", err);
                    this.loading = false;
                });
            },
            addTap() {
                this.dispatchPopupData.visible = true;
                this.dispatchPopupData.loading = false;
                this.title="添加优惠券";
                this.id=''
                this.name='';
                this.type=1;
                this.status=0;
                this.money='';
                this.amount='';
                this.startTime='';
                this.endTime='';
                this.momentArrPop[0] = '';
                this.momentArrPop[1] = '';
                this.selectParkIds=[];
            },
            updateCoupon(record) {
                this.title="修改优惠券";
                this.id=record.id;
                this.name=record.name;
                this.type=record.type;
                this.money=record.money;
                this.amount=record.amount;
                this.status=record.isStatus;
                this.startTime=record.startTime;
                this.endTime=record.endTime;
                this.momentArrPop[0] = record.startTime;
                this.momentArrPop[1] = record.endTime;
                if(record.parkId != null){
                    for(var i in record.parkId ){
                        this.selectParkIds.push(""+record.parkId[i]+"")
                    }
                }else{
                    this.selectParkIds=null
                }
                this.selectedKeys=record.parkId;
                this.dispatchPopupData.visible = true;
                this.dispatchPopupData.loading = false;
            },

            getQueryCondition() {
                let condition = this.queryCondition;
                let startTimeStamp = "";
                let endTimeStamp = "";
                condition.name = this.searchName;
                condition.type = this.searchType;
                if (this.momentArr != undefined && this.momentArr.length != 0) {
                    condition.timeScreenCondition = "6";
                    startTimeStamp = new Date(this.momentArr[0]).getTime() / 1000;
                    endTimeStamp = new Date(this.momentArr[1]).getTime() / 1000;
                } else {
                    condition.timeScreenCondition = "0";
                }
                condition.startTimeStamp = startTimeStamp;
                condition.endTimeStamp = endTimeStamp;
                return condition;
            },
            hideDispatchPopup() {
                this.dispatchPopupData.visible = false;
                this.id=''
                this.name='';
                this.type=1;
                this.status=0;
                this.money='';
                this.amount='';
                this.selectParkIds=[];
            },

            addOrUpdateCoupon() {
                 let condition = {};
                //名称
                let name = this.name;
                let type=this.type;
                let status=this.status;
                let money=this.money;
                let amount=this.amount;
                let startTime=this.startTime;
                let endTime=this.endTime;
                let parkId=[];
                for(var i in this.selectParkIds){
                    if(this.selectParkIds[i].indexOf('-') ==-1){
                        parkId.push(this.selectParkIds[i])
                    }
                }
                // let parkId=this.selectParkIds;
                if (name == '' || name == undefined) {
                    return this.$message.warn('优惠券名称不能为空!');
                }
                if (money == 0) {
                    return this.$message.warn('金额不能为0');
                }
                if (startTime == '' || startTime == undefined) {
                    return this.$message.warn('优惠券有效时间开始不能为空!');
                }
                if (endTime == '' || endTime == undefined) {
                    return this.$message.warn('优惠券有效时间结束不能为空!');
                }
                condition.id=this.id;
                condition.name = name;
                condition.type=type;
                condition.isStatus=status;
                condition.money=money;
                condition.amount=amount;
                condition.startTime=startTime;
                condition.endTime=endTime;
                condition.parkId=parkId;
                this.dispatchPopupData.loading = true;
                 apiCoupon.addOrUpdateCoupon(condition).then((data) => {
                    if (data.code === 2000) {
                        this.$message.success("操作成功");
                        this.queryData();
                        this.hideDispatchPopup();
                    }
                     this.dispatchPopupData.visible = false;
                }).catch((err) => {
                    console.log("失："+err)
                    this.$message.warn('操作失败');
                     this.dispatchPopupData.visible = false;
                });
            },
            deleteOk(id){
                let con={};
                con.id=id;
                apiCoupon.deleteCoupon(con).then(res=>{
                    if (res.code === 2000) {
                        this.$message.success("删除成功");
                        this.queryData();
                    }
                }).catch(err=>{
                    console.log(err);
                    this.$message.warn('删除失败');
                })
            },
            onExpand(keys) {
                console.log('onExpand', keys);
                // if not set autoExpandParent to false, if children expanded, parent can not collapse.
                // or, you can remove all expanded children keys.
                this.expandedKeys = keys;
                this.autoExpandParent = false;
            },
                // 点击复选框触发
            onCheck(keys) {
                console.log('onCheck', keys);
                this.selectParkIds = keys;
            },
                // 点击树节点触发
            onSelect(keys, info) {
                 console.log('onselect', keys);
                console.log('info', info);
                this.selectParkIds = keys;
            },
        },

        computed: {
            computedStyle() {
                return function (selectId) {
                    return this.selectId == selectId ? "" : "";
                }
            }
        },

        /*页面初始化渲染后执行*/
        mounted() {
            this.button_time(0)
            this.parkingPoint();
        }
    }
</script>

<style scoped>
    .ant-table td {
        white-space: nowrap;
    }

    .content {
        width: 100%;
        height: 100%;
    }

    .header-setting {
        width: 100%;
        height: 174px;
        background: #fff;
    }

    .header-setting .breadcrumb {
        margin-left: 41px;
        padding-top: 15px;
    }

    /*表格行选中背景颜色*/
    .clickRowStyl {
        background-color: #C1E0FD;
    }

    .box-condition-body {
        padding-left: 40px;
        padding-right: 40px;
        background: #fff;
    }

    .box-condition-item {
        display: flex;
        align-items: center;
        margin-bottom: 20px;
    }

    .button_time {
        margin-left: 100px;
        display: flex;
    }

    .button_time button {
        margin-right: 10px;
    }

    /* 表单 */
    .box-form {
        padding-left: 40px;
        padding-right: 40px;
        min-height: 705px;
        background: #fff;
        margin-top: 8px;
    }

    .box-form .box-tool {
        padding-top: 11px;
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: space-between;
    }

    .box-form .box-table {
        margin-top: 12px;
    }

    .box-tool button {
        margin: 0 0 0 10px;
    }

    /*轮播*/
    .modalBox {
        display: flex;
        justify-content: space-between;
        width: 100%;
    }

    .modalBox .playImg {
        position: relative;
        width: 60%
    }

    .modalBox .fromBox {
        width: 35%
    }

    .modalBox .fromBox input {
        margin-bottom: 15px;
    }

    .modalBox .playImg ul.imgList {
        width: 100%;
        display: flex;
        align-items: center;
        position: relative;
    }

    .modalBox .playImg .img {
        width: 100%;
        height: 200px;
    }

    .modalBox .playImg .img img {
        display: block;
        width: 100%;
        height: 100%;
    }

    .modalBox .playImg .pointBox {
        position: absolute;
        bottom: 10px;
        width: 100%;
    }

    .modalBox .playImg .pointBox ul {
        display: flex;
        justify-content: center;
    }

    .modalBox .playImg .pointBox li.point {
        width: 10px;
        height: 10px;
        display: inline-block;
        border-radius: 50%;
        margin: 0 10px;
        background: #000;
    }

    .modalBox .playImg .pointBox li.active {
        background: #ff7255;
    }

    .array {
        display: flex;
        justify-content: space-between;
        align-items: center;
        width: 100%;
        opacity: 1;
        position: absolute;
        font-size: 30px;
    }

    .array .left, .array .right {
        color: #fafafa;
        cursor: pointer
    }

    /*.array .right{color:#999;cursor:pointer}*/
    .array .left:hover {
        color: #333;
    }

    .array .right:hover {
        color: #333;
    }

    /* box-correction-popup */
    .box-correction-popup {
        padding: 20px;
        height: 555px;
        /* flex */
        display: flex;
        align-items: center;
    }

    .box-correction-popup .box-image {
        padding: 0 15px;
        width: 888px;
        height: 500px;
    }

    .box-correction-popup .box-image .icon-image {
        width: 100%;
        height: 100%;
    }

    .box-correction-popup .box-correct {
        margin: 0 15px;
        width: 310px;
        height: 500px;
    }

    .box-correction-popup .box-correct .item-correct {
        margin-top: 20px;
        display: flex;
        align-items: center;
    }

    .box-correction-popup .box-correct .item-correct .text-correct {
        font-weight: 300;
        font-size: 14px;
        width: 100px;
    }

    .box-correction-popup .box-correct .item-correct .text-value {
        font-weight: 300;
        font-size: 14px;
        line-height: 1.428571429;
        color: #020202;
    }

    /* box-dispatch-item */
    .box-dispatch-item {
        display: flex;
        align-items: center;
    }

    .box-dispatch-item .text-key {
        width: 200px;
        /* text */
        font-size: 14px;
        font-weight: 300;
        color: #797979;
    }

    .box-dispatch-item .text-value {
        width: 265px;
    }
</style>
